package 面试题24_反转链表;

/**
 * @Author ：xu_xiaofeng.
 * @Date ：Created in 13:03 2021/3/11
 * @Description：
 */
class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

public class Solution {
    public ListNode reverseList(ListNode head) {

        if (head == null) return null;
        if (head.next == null) return head;

        ListNode pReverseHead = null;
        ListNode pCurNode = head;
        ListNode pPrevNode = null;
        ListNode pNextNode;

        while (pCurNode != null) {
            // 获取下一个节点
            pNextNode = pCurNode.next;

            // 若后续节点为null，说明遍历到原链表的最后一个节点了
            if (pNextNode == null) {
                pReverseHead = pCurNode;
            }

            // 翻转指向
            pCurNode.next = pPrevNode;

            // 当前节点设为前一个节点，准备下次循环
            pPrevNode = pCurNode;

            // 下一个节点设为当前节点，准备下一次循环
            pCurNode = pNextNode;
        }

        return pReverseHead;

    }
}
